package com.lcx.movie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lcx.movie.entity.Hall;
import com.lcx.movie.entity.Schedule;
import com.lcx.movie.mapper.HallMapper;
import com.lcx.movie.mapper.ScheduleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lcx.movie.entity.Cinema;
import com.lcx.movie.mapper.CinemaMapper;
import com.lcx.movie.service.CinemaService;

import java.util.List;

/**
 * 影院服务实现类，继承自 MyBatis-Plus 的 ServiceImpl，并实现了 CinemaService 接口。
 * 提供影院相关的具体业务逻辑实现。
 *
 * @version 1.0
 * @author lcx
 * @date 2025/2/9 11:25
 */
@Service
public class CinemaServiceImpl extends ServiceImpl<CinemaMapper, Cinema> implements CinemaService {
    @Autowired
    private HallMapper hallMapper;
    @Autowired
    private ScheduleMapper scheduleMapper;
    @Autowired
    private CinemaMapper cinemaMapper;

    /**
     * 根据电影 ID 获取关联的影院列表。
     * @param movieId 电影 ID
     * @return 关联该电影的影院列表
     */
    @Override
    public List<Cinema> setCinemasByMovieId(Integer movieId) {
        // 调用 Mapper 层的方法，根据电影 ID 查询关联的影院列表
        List<Cinema> cinemaList =  getBaseMapper().setCinemasByMovieId(movieId);
        for (Cinema cinema : cinemaList) {
            System.out.println("cinema = " + cinema.getCinemaId());
            QueryWrapper queryWrapper = new QueryWrapper();
            queryWrapper.eq("cinema_id", cinema.getCinemaId());
            List<Hall> hallList = hallMapper.selectList(queryWrapper);
            for (Hall hall : hallList) {
                System.out.println("hall = " + hall.getHallName());
                List<Schedule> scheduleList = scheduleMapper.findScheduleByCinemaAndMovieAndHall(hall.getHallId(), hall.getCinemaId(), movieId);
                hall.setScheduleList(scheduleList);
            }
            cinema.setHallList(hallList);
        }
        return cinemaList;
    }

    /**
     * 根据邮箱判断管理员属于哪个影院
     * @param userEmail 用户邮箱
     * @return 影院集合
     */
    @Override
    public Cinema selectCinemaByEmail(String userEmail) {
        return cinemaMapper.selectCinemaByEmail(userEmail);
    }

    /**
     * 分页查看平台影院管理 （影院名称）
     * @param cinemaName 影院名称
     * @return 影院集合
     */
    @Override
    public List<Cinema> selectCinemaPage(String cinemaName) {
        return  this.baseMapper.selectCinemaPage(cinemaName);
    }
    /**
     * 平台新增影院
     * @param cinema 影院实体
     * @return 受影响的行数
     */
    @Override
    public int insertCinema(Cinema cinema) {
        return this.baseMapper.insertCinema(cinema);
    }
    /**
     * 平台修改影院
     * @param cinema 影院对象
     * @return 字符串提示信息
     */
    @Override
    public String updateCinema(Cinema cinema) {
        return this.baseMapper.updateCinema(cinema)>0?"修改成功":"修改失败";
    }
    /**
     * 平台删除影院
     * @param cinemaId 影院id
     * @return 字符串提示信息
     */
    @Override
    public String deleteCinema(Integer cinemaId) {
        return this.baseMapper.deleteCinema(cinemaId)>0?"删除成功":"删除失败";
    }
    /**
     * 平台管理员新增电影时，查询所有的影院
     * @return 影院集合
     */
    public List<Cinema> getCinemas(){
        return this.baseMapper.getCinemas();
    }
}
